<?php

/**
 * This is the model class for table "{{material}}".
 *
 * The followings are the available columns in table '{{material}}':
 * @property integer $id
 * @property integer $categoryId
 * @property string $name
 *
 * The followings are the available model relations:
 * @property MaterialCategory $category
 * @property MaterialAltName[] $altNames
 * @property MaterialModel[] $models
 * @property MaterialTag[] $tags
 */
class Material extends CActiveRecord {
	/**
	 * Returns the static model of the specified AR class.
	 * @return Material the static model class
	 */
	public static function model($className = __CLASS__) {
		return parent::model($className);
	}

	/**
	 * @return string the associated database table name
	 */
	public function tableName() {
		return '{{material}}';
	}

	/**
	 * @return array validation rules for model attributes.
	 */
	public function rules() {
		// NOTE: you should only define rules for those attributes that
		// will receive user inputs.
		return array(
			array(
				'categoryId, name',
				'required',
			),
			array(
				'categoryId',
				'numerical',
				'integerOnly' => true
			),
			array(
				'name',
				'unique',
			),
			array(
				'name',
				'length',
				'max' => 255
			),
			// The following rule is used by search().
			// Please remove those attributes that should not be searched.
			array(
				'id, categoryId, name',
				'safe',
				'on' => 'search'
			),
		);
	}

	/**
	 * @return array relational rules.
	 */
	public function relations() {
		// NOTE: you may need to adjust the relation name and the related
		// class name for the relations automatically generated below.
		return array(
			'category' => array(
				self::BELONGS_TO,
				'MaterialCategory',
				'categoryId'
			),
			'altNames' => array(
				self::HAS_MANY,
				'MaterialAltName',
				'materialId'
			),
			'models' => array(
				self::HAS_MANY,
				'MaterialModel',
				'materialId'
			),
			'modelCount' => array(
				self::STAT,
				'MaterialModel',
				'materialId'
			),
			'tags' => array(
				self::MANY_MANY,
				'MaterialTag',
				'{{material_tag_material}}(materialId, tagId)'
			),
		);
	}

	public function behaviors() {
		return array(
			'AuditableBehavior' => array(
				'class' => 'components.db.AuditableBehavior',
				'attributes' => 'categoryId, name'
			),
			'LogRecentBehavior' => array(
				'class' => 'components.db.LogRecentBehavior',
			),
		);
	}

	/**
	 * @return array customized attribute labels (name=>label)
	 */
	public function attributeLabels() {
		return array(
			'id' => 'ID',
			'categoryId' => '类别',
			'name' => '名称',
		);
	}

	/**
	 * Retrieves a list of models based on the current search/filter conditions.
	 * @return CActiveDataProvider the data provider that can return the models based on the search/filter conditions.
	 */
	public function search() {
		// Warning: Please modify the following code to remove attributes that
		// should not be searched.

		$criteria = new CDbCriteria;

		$criteria->compare('id', $this->id);
		$criteria->compare('categoryId', $this->categoryId);
		$criteria->compare('name', $this->name, true);
		$criteria->with = array(
			'category',
			'altNames',
			'modelCount',
			'tags'
		);

		return new CActiveDataProvider($this, array(
			'criteria' => $criteria,
		));
	}
}
